package edu.xust.service.impl;


import edu.xust.config.Resource;
import edu.xust.config.Service;
import edu.xust.dao.DriversDao;
import edu.xust.dto.BaseDto;
import edu.xust.dto.MessageEnum;
import edu.xust.entity.Drivers;
import edu.xust.page.PageInfo;
import edu.xust.service.DriversService;

import java.util.List;
import java.util.Optional;

//业务逻辑层 分担了控制器层 controller 与  数据访问层 dao的业务逻辑部分的判断与计算，例如下单失败是因为库存不足
@Service("driversService")//这个名字和controller需要的service的名字对应
public class DriversServiceImpl implements DriversService {
    @Resource
    DriversDao driversDao;

    /**
     * 查询所有驾驶员信息
     * @param pageInfo
     * @return
     * @throws Exception
     */
    @Override
    public BaseDto getDriversByPage(PageInfo pageInfo) throws Exception {
        List<Drivers> driversByPage = driversDao.getDriversByPage(pageInfo);
        //允许为空的容器包装类
        Optional<List<Drivers>> op = Optional.ofNullable(driversByPage);
        //isPresent() -->判断是否为空
        MessageEnum messageEnum = op.isPresent()?MessageEnum.FINDALLDRIVERSSUCCESS:MessageEnum.FINDALLDRIVERSFAIL;//如果成立 赋值 赋？与：之间 否则：之后
        BaseDto dto = new BaseDto(messageEnum,op.get());//如果没有查到数据 前端拿到的时候失败的枚举和null的集合，如果成功前端拿到的是成功的枚举 和  查询到的集合
        dto.setObj(pageInfo);
        return dto;
    }


    /**
     * 添加司机
     * @param drivers
     * @return
     * @throws Exception
     */
    @Override
    public BaseDto addDrivers(Drivers drivers){
        /*Integer integer = driversDao.addDrivers(drivers);
        MessageEnum op = integer>0?MessageEnum.FINDALLDRIVERSSUCCESS:MessageEnum.FINDALLDRIVERSFAIL;//如果成立 赋值 赋？与：之间 否则：之后
        BaseDto dto = new BaseDto(op);//如果没有查到数据 前端拿到的时候失败的枚举和null的集合，如果成功前端拿到的是成功的枚举 和  查询到的集合
        return dto;*/
        int i = driversDao.addDrivers(drivers);
        MessageEnum messageEnum = i > 0 ? MessageEnum.GETALLSTUDENTSUCCESS : MessageEnum.GETSTUDENTBYIDFAIL;
        return new BaseDto(messageEnum);
    }

    /**
     * 根据id查询单个司机
     * @param id
     * @return
     * @throws Exception
     */
    @Override
    public BaseDto getDriverById(String id) throws Exception {
        Drivers driverById = driversDao.getDriverById(id);
        //允许为空的容器包装类
        Optional<Drivers> op = Optional.ofNullable(driverById);
        //isPresent() -->判断是否为空
        MessageEnum messageEnum = op.isPresent()?MessageEnum.FINDALLDRIVERSSUCCESS:MessageEnum.FINDALLDRIVERSFAIL;//如果成立 赋值 赋？与：之间 否则：之后
        BaseDto dto = new BaseDto(messageEnum,op.get());//如果没有查到数据 前端拿到的时候失败的枚举和null的集合，如果成功前端拿到的是成功的枚举 和  查询到的集合
        return dto;
    }

    /**
     * 根据司机编号查询货单信息
     * @param id
     * @return
     * @throws Exception
     */
    @Override
    public BaseDto getDriversWithOrder(String id) throws Exception {
        Drivers driverById = driversDao.getDriversWithOrder(id);
        //允许为空的容器包装类
        Optional<Drivers> op = Optional.ofNullable(driverById);
        //isPresent() -->判断是否为空
        MessageEnum messageEnum = op.isPresent()?MessageEnum.FINDALLDRIVERSSUCCESS:MessageEnum.FINDALLDRIVERSFAIL;//如果成立 赋值 赋？与：之间 否则：之后
        BaseDto dto = new BaseDto(messageEnum,op.get());//如果没有查到数据 前端拿到的时候失败的枚举和null的集合，如果成功前端拿到的是成功的枚举 和  查询到的集合
        return dto;
    }

    /**
     * 修改司机信息
     * @param drivers
     * @return
     */
    @Override
    public BaseDto editDrivers(Drivers drivers) {
        int i = driversDao.editDrivers(drivers);
        MessageEnum messageEnum = i > 0 ? MessageEnum.GETALLSTUDENTSUCCESS : MessageEnum.GETSTUDENTBYIDFAIL;
        return new BaseDto(messageEnum);
    }

    /**
     * 根据id删除司机
     * @param id
     * @return
     */
    @Override
    public BaseDto deleteDrivers(String id) {
        int i = driversDao.deleteDrivers(id);
        MessageEnum messageEnum = i > 0 ? MessageEnum.GETALLSTUDENTSUCCESS : MessageEnum.GETSTUDENTBYIDFAIL;
        return new BaseDto(messageEnum);
    }
}
